// RAP [bm]: animations
///*******************************************************************************
// * Copyright (c) 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// ******************************************************************************/
//package org.eclipse.ui.internal;
//
//import java.util.ArrayList;
//import java.util.Iterator;
//import java.util.List;
//
//import org.eclipse.jface.util.Geometry;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.events.PaintEvent;
//import org.eclipse.swt.events.PaintListener;
//import org.eclipse.swt.graphics.GC;
//import org.eclipse.swt.graphics.Image;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.widgets.Canvas;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Display;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.ui.internal.AnimationEngine;
//
///**
// * Creates an animation effect where the interpolated rectangles are displayed using Canvas
// * controls that show an image of the bits that were originally occupied by the various
// * 'start' rectangles.
// * 
// * @since 3.3
// *
// */
//public class RectangleAnimationImageFeedback extends
//		RectangleAnimationFeedbackBase {
//	private class ImageCanvas extends Canvas {
//		private Image image;
//
//		/**
//		 * @param parent
//		 * @param style
//		 */
//		public ImageCanvas(Composite parent, int style, Image image) {
//			super(parent, style);
//			this.image = image;
//
//			addPaintListener(new PaintListener() {
//				public void paintControl(PaintEvent e) {
//					paintImage(e.gc);
//				}
//			});
//		}
//
//		/**
//		 * @param gc
//		 */
//		protected void paintImage(GC gc) {
//			gc.drawImage(image, 0, 0, image.getBounds().width, image
//					.getBounds().height, 0, 0, getBounds().width,
//					getBounds().height);
//		}
//
//		/* (non-Javadoc)
//		 * @see org.eclipse.swt.widgets.Widget#dispose()
//		 */
//		public void dispose() {
//			super.dispose();
//			image.dispose();
//		}
//	}
//
//	private Image backingStore;
//	private Shell theShell;
//	private Display display;
//	private List controls = new ArrayList();
//
//
//	public RectangleAnimationImageFeedback(Shell parentShell, Rectangle start,
//			Rectangle end) {
//		super(parentShell, start, end);
//	}
//
//	public void dispose() {
//		backingStore.dispose();
//		for (Iterator ctrlIter = controls.iterator(); ctrlIter.hasNext();) {
//			ImageCanvas canvas = (ImageCanvas) ctrlIter.next();
//			canvas.dispose();
//		}
//
//		theShell.setVisible(false);
//		theShell.dispose();
//	}
//
//	public void initialize(AnimationEngine engine) {
//		display = getAnimationShell().getDisplay();
//
//		Rectangle psRect = getAnimationShell().getBounds();
//		theShell = new Shell(getAnimationShell(), SWT.NO_TRIM | SWT.ON_TOP);
//		theShell.setBounds(getAnimationShell().getBounds());
//
//		// Capture the background image		
//		backingStore = new Image(theShell.getDisplay(), psRect);
//		GC gc = new GC(display);
//		gc.copyArea(backingStore, psRect.x, psRect.y);
//		gc.dispose();
////		changeCoordinates();
////		captureImages();
//		theShell.setBackgroundImage(backingStore);
//		theShell.setVisible(true);
//		display.update();
//
//	}
//		
//	/* (non-Javadoc)
//	 * @see org.eclipse.ui.internal.RectangleAnimationFeedbackBase#jobInit(org.eclipse.ui.internal.AnimationEngine)
//	 */
//	public boolean jobInit(AnimationEngine engine) {
//		changeCoordinates();
//		captureImages();
//		return super.jobInit(engine);
//	}
//	
//	public void addStartRect(Rectangle rect) {
//		if (rect == null)
//			return;
//
//		//	Rectangle start = Geometry.toControl(getAnimationShell(), rect);
//		super.addStartRect(rect);
//
//	}
//
//	public void addEndRect(Rectangle rect) {
//		if (rect != null) {
//			//	Rectangle end = Geometry.toControl(getAnimationShell(), rect);
//			super.addEndRect(rect);
//		}
//	}
//
//	public void renderStep(AnimationEngine engine) {
//		Iterator ctrlIter = controls.iterator();
//		Iterator currentRects = getCurrentRects(engine.amount()).iterator();
//		while (currentRects.hasNext()) {
//			ImageCanvas canvas = (ImageCanvas) ctrlIter.next();
//			canvas.setBounds((Rectangle) currentRects.next());
//		}
//		display.update();
//
//	}
//
//	public void changeCoordinates() {
//		Iterator startRectIter = getStartRects().iterator();
//		Iterator endRectIter = getEndRects().iterator();
//		while (startRectIter.hasNext()) {
//			Rectangle startRect = (Rectangle) startRectIter.next();
//			Rectangle mapStartRect = Geometry.toControl(theShell, startRect);
//			startRect.x = mapStartRect.x;
//			startRect.y = mapStartRect.y;
//			Rectangle endRect = (Rectangle) endRectIter.next();
//			Rectangle mapEndRect = Geometry.toControl(theShell, endRect);
//			endRect.x = mapEndRect.x;
//			endRect.y = mapEndRect.y;
//		}
//	}
//
//	private void captureImages() {
//
//		for (Iterator iterator = getStartRects().iterator(); iterator.hasNext();) {
//			Rectangle rect = (Rectangle) iterator.next();
//			Image image = new Image(display, rect.width, rect.height);
//			GC gc = new GC(backingStore);
//			gc.copyArea(image, rect.x, rect.y);
//			gc.dispose();
//			ImageCanvas canvas = new ImageCanvas(theShell, SWT.BORDER
//					| SWT.NO_BACKGROUND, image);
//			controls.add(canvas);
//
//		}
//	}
//
//}
